/*
 * AC
 * DP
 **/
#include <stdio.h>
#include <string.h>

int array[100][100];
int tmp[100];
int tmp2[100];
int n;
int get_max(int start, int end);
int get_max_1(int i);
int main(int argc, char **argv)
{
	int i, j, maxx = 0, t;
	scanf("%d", &n);
	for (i = 0; i < n; i++)
		for (j = 0; j < n; j++)
			scanf("%d", &array[i][j]);

	for (i = 0; i < n; i++)
		for (j = i; j < n; j++) {
			if ((t = get_max(i, j)) > maxx)
				maxx = t;
		}
	printf("%d\n", maxx);
	return 0;
}

int get_max(int start, int end)
{
	int i, j, maxx = 0;
	memset(tmp, 0, n * sizeof(int));
	memset(tmp2, 0, n * sizeof(int));
	for (j = 0; j < n; j++) {
		for (i = start; i <= end; i++) {
			tmp[j] += array[i][j];
		}
	}
	for (i = 0; i < n; i++) {
		tmp2[i] = get_max_1(i);
		if (tmp2[i] > maxx) {
			maxx = tmp2[i];
		}
	}
	return maxx;
}

int get_max_1(int i)
{
	if (i == 0) {
		tmp2[i] = tmp[i];
		return tmp2[i];
	}
	if (tmp2[i - 1] > 0) {
		tmp2[i] = tmp[i] + get_max_1(i - 1);
	}
	else tmp2[i] = tmp[i];

	return tmp2[i];
}
